package com.ls.entity;

import com.alibaba.fastjson.annotation.JSONField;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.Version;
import com.baomidou.mybatisplus.extension.activerecord.Model;

import java.math.BigDecimal;
import java.time.LocalDate;

import com.baomidou.mybatisplus.annotation.TableId;

import java.time.LocalDateTime;
import java.io.Serializable;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.apache.poi.hpsf.Decimal;

/**
 * <p>
 * C端用户表
 * </p>
 *
 * @author pengyu
 * @since 2024-06-28
 */
@Data
@EqualsAndHashCode(callSuper = false)
public class Customer extends Model<Customer> {

    private static final long serialVersionUID = 1L;
    /**
     * 自增主键
     */
    @TableId(value = "customer_id", type = IdType.AUTO)
    private Long customerId;

    /**
     * 角色ID,
     * 1-超级管理员,2-平台客服,3-会员 4-非会员
     * 本系统用户只能是单角色
     * 本表中只能是3或4
     */
    private Long roleId;

    /**
     * C端用户电话
     */
    private String phone;

    /**
     * 密码，phone 作为账号
     */
    private String password;
    /**
     * 标签
     */
    private String tradeInfo;
    /**
     * 昵称
     */
    private String nickname;
    /*
     * 用户头像
     * */
    public String avatar;
    /**
     * 生日
     */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    @JSONField(format = "yyyy-MM-dd")
    private LocalDate birthday;
    /*生日类型 0为农历，1为阳历*/
    private Integer birthdayType;

    /**
     * 性别 1 男 2 女 3 未知
     */
    private Integer sex;

    /**
     * 年月日时分秒毫秒+三位随机数 YYYYMMDDHHmmssSSSXXX
     */
    private String orderNo;

    /**
     * 会员等级，1级最小，默认0,非会员
     */
    private Integer memberLevel;

    /**
     * 发送通道，1 本机 2 平台，默认本机
     */
    private Integer channelType;

    public static final int CHANNEL_LOCAL = 1;
    public static final int CHANNEL_PLATFORM = 2;

    /**
     * 是否是会员，默认  0 :否  -1:过期  1:是会员
     */
    private Integer memberStatus;

    /**
     * 会员分数，默认0 ，积分变化时更新此字段
     */
    private Integer memberScore;
    /**ai短信生成条数，每个月十条*/
    private Integer aiSmsCount;

    /**
     * 会员短信当月总条数
     */
    private Integer messageNumTotal;
    /**
     * 会员短信剩余条数
     */
    private Integer messageNum;
    /**
     * 短信套餐当月总条数
     */
    private Integer smsThaliNumTotal;
    /**
     * 短信套餐剩余条数
     */
    private Integer smsThaliNum;
    /**
     * 省
     */
    private String province;
    /**
     * 市
     */
    private String city;

    /**
     * 短信签名
     */
    private String sign;
    /**
     * 短信签名待审核
     */
    private String signVerify;
    private Long feigeSignId;
    /**
     * 公司名称
     */
    private String compName;
    /**
     * 公司信用代码
     */
    private String creditCode;
    /**
     * 营业执照
     */
    private String signPic;
    /**
     * 法人姓名
     */
    private String legalPersonName;
    /**
     * 法人身份证号码
     */
    private String legalPersonIdCard;
    /**
     * 经办人姓名
     */
    private String operatorName;
    /**
     * 经办人身份证号码
     */
    private String operatorIdCard;
    /**
     * 经办人身份证照片：第一张正面 第二张反面 逗号拼接
     */
    private String operatorPic;
    /**
     * 其他资质图片 逗号拼接
     */
    private String aptitudePic;
    /**
     * 是否使用平台签名，0使用自定义，1使用乐信通，默认乐信通，2使用智惠信使
     */
    private Integer isPlatformSign;
    /**
     * 审核人id
     */
    private Long verifyUserId;
    /**
     * 签名审核状态，1 已提交 2 驳回 3 通过
     */
    private Integer signVerifyStatus;
    /**
     * 签名审核内容
     */
    private String signVerifyRemark;
    /**
     * 签名审核时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime signVerifyTime;

    /**
     * 本月平台可发送短信数量
     */
    private Integer currentQuantity;

    /**
     * 本月已发送平板短信数量，不能大于 current_quantity
     */
    private Integer currentSendTimes;

    /**
     * 本手机发送短信总数
     */
    private Integer phoneSendTimes;
    /**
     * 平台发送短信总数
     */
    private Integer platformSendTimes;

    /**
     * 发送短信次数
     */
    private Integer sendTimes;

    /**
     * 最新一次发送时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime lastSendTime;
    /**
     * 短信剩余总条数
     */
    private Integer smsTotal;
    /**
     * 消费总金额
     */
    private BigDecimal consumeAmount;

    /**
     * 消费订单次数，默认0
     */
    private Integer orderTimes;

    /**
     * 创建人
     */
    private String creator;

    /**
     * 上次登录时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime lastLoginTime;

    /**
     * 登录次数
     */
    private Integer loginTimes;

    /**
     * 创建时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;

    /**
     * 更新时间，自动
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updateTime;

    /**
     * 会员过期时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime memberExpireTime;
    /**
     * 会员清除时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime memberClearTime;
    /**
     * 短信套餐过期时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime smsExpireTime;
    /**
     * 短信套餐清除时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime smsClearTime;
    /**
     * 更新人
     */
    private String updater;

    /**
     * 注册时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime registerTime;

    /**
     * 注销时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime cancelTime;

    /**
     * 有效状态，0为无效（已注销），1为有效，默认1
     */
    private Integer validFlag;

    @Override
    protected Serializable pkVal() {
        return this.customerId;
    }

}
